﻿<!DOCTYPE HTML>
<html lang="zh">
<head>
<title>Catch - 语法 &amp; 使用 | AutoHotkey v2</title>
<meta name="description" content="The Catch statement specifies one or more statements to execute if a value or error is thrown during execution of a Try statement." />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
</head>
<body>

<h1>Catch</h1>

<p>指定在 <a href="Try.htm">Try</a> 语句执行期间如果抛出值或错误时要执行的一或多条<a href="../Concepts.htm#statement">语句</a>.</p>

<pre class="Syntax" style="line-height: 120%"><span class="func">Catch</span> <span class="optional">ErrorClass</span> <span class="optional"><span class="func">as</span> OutputVar</span>
{
    <i>语句</i>
}</pre>
<h2 id="Parameters">参数</h2>
<dl>

 <dt>ErrorClass</dt>
  <dd>
    <p>类型: <a href="Class.htm">Class</a></p>
    <p>应该被捕获的值的类, 如 <code>Error</code>, <code>TimeoutError</code> 或 <code>MyCustomError</code>. 这也可以是一个以逗号分隔的类的列表. 类必须由其确切的全名指定, 而不是任意的表达式, 因为每个类的<a href="Class.htm#Prototype">原型</a>在加载时被解析. 任何<a href="../ObjList.htm">内置的</a>或<a href="../Objects.htm#Custom_Classes">用户定义的</a>类都可以被使用, 即使它不是从 <a href="Error.htm">Error</a> 派生的.</p>
    <p>如果没有指定类, 默认是 <code>Error</code>.</p>
    <p>要捕捉任何类, 请使用 <code>Catch Any</code>.</p>
    <p>如果使用了无效的类名, 或者由于存在同名的局部变量而无法访问一个类, 则会显示加载时错误.</p>
  </dd>

  <dt>OutputVar</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#variables">变量</a></p>
    <p>存储抛出值的变量, 这通常是一个 <a href="Error.htm">Error 对象</a>. 这不能是一个<a href="../Language.htm#dynamic-variables">动态变量</a>.</p>
    <p>如果省略, 抛出的值不能被直接访问, 但仍然可以通过使用没有参数的 <a href="Throw.htm">Throw</a> 来重新抛出.</p>
  </dd>

  <dt><i>Statement(s)</i></dt>
  <dd>
    <p>抛出值或错误时执行的<a href="../Concepts.htm#statement">语句</a>.</p>
    <p>如果只使用一个语句, 一般不需要大括号. 有关详情, 请参阅 <a href="Block.htm">{...} (block)</a>.</p>
  </dd>

</dl>

<h2 id="Remarks">备注</h2>
<p>多个 <em>Catch</em> 语句可以一个接一个地使用, 每个语句指定一个不同的类(或多个类). 如果值不是任何一个列出的类的实例, 它就不会被这个 <em>Try-Catch</em> 捕获, 但可能会被调用堆栈中更高的一个捕获.</p>
<p><em>Catch</em> 的每次使用都必须附属于(与之关联) 它上面的 <a href="Try.htm">Ty</a> 语句. <em>Catch</em> 总是附属于它上面最近的未被认领的 <em>Try</em> 语句, 除非使用<a href="Block.htm">区块</a>来改变这种行为.</p>
<p>参数列表可以选择括在括号中, 在这种情况下, <code>catch</code> 后的空格或制表符是可选的.</p>
<p><em>Catch</em> 后面可以有 <a href="Else.htm">Else</a>, 如果在相关的 <em>Try</em> 块中没有抛出异常, 则执行 <a href="Else.htm">Else</a>.</p>
<p>可选使用 <a href="Block.htm#otb">One True Brace(OTB) 样式</a>. 例如:</p>
<pre>try {
    ...
} catch Error {
    ...
}</pre>
<p>加载时错误不能被捕获, 因为它们发生在 <em>try</em> 语句执行之前.</p>

<h2 id="Related">相关</h2>
<p><a href="Try.htm">Try</a>, <a href="Throw.htm">Throw</a>, <a href="Error.htm">Error 对象</a>, <a href="Else.htm">Else</a>, <a href="Finally.htm">Finally</a>, <a href="Block.htm">区块</a>, <a href="OnError.htm">OnError</a></p>

<h2 id="Examples">示例</h2>
<p>请参阅 <a href="Try.htm#Examples">Try</a>.</p>

</body>
</html>